#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Python数据类型演示程序
包含所有主要数据类型的定义和实际应用示例
"""

def main():
    print("=" * 50)
    print("Python数据类型演示程序")
    print("=" * 50)
    
    # 1. 数字类型演示
    print("\n【1. 数字类型】")
    print("-" * 30)
    
    # 整数
    age = 25
    count = 100
    temperature = -5
    print(f"整数示例：年龄={age}, 数量={count}, 温度={temperature}")
    
    # 浮点数
    pi = 3.14159
    price = 19.99
    height = 1.75
    print(f"浮点数示例：π={pi}, 价格={price}, 身高={height}")
    
    # 复数
    z1 = 3 + 4j
    z2 = 2j
    result = z1 * z2
    print(f"复数示例：{z1} * {z2} = {result}")
    
    # 数字运算示例
    radius = 5.0
    area = pi * radius ** 2
    print(f"计算示例：半径为{radius}的圆面积 = {area:.2f}")
    
    # 2. 组合数据类型演示
    print("\n【2. 组合数据类型】")
    print("-" * 30)
    
    # 列表
    print("\n列表 (list) - 购物车示例：")
    shopping_cart = []
    shopping_cart.append('牛奶')
    shopping_cart.append('面包')
    shopping_cart.append('鸡蛋')
    print(f"购物车初始状态：{shopping_cart}")
    
    # 修改列表
    shopping_cart[1] = '全麦面包'  # 修改元素
    shopping_cart.remove('鸡蛋')    # 删除元素
    print(f"购物车修改后：{shopping_cart}")
    
    # 元组
    print("\n元组 (tuple) - 坐标和颜色示例：")
    coordinates = (10.5, 20.3)
    colors = ('red', 'green', 'blue')
    
    # 元组解包
    x, y = coordinates
    print(f"坐标点：({x}, {y})")
    
    # 遍历元组
    print("可用颜色：", end="")
    for color in colors:
        print(f" {color}", end="")
    print()
    
    # 字典
    print("\n字典 (dict) - 用户信息示例：")
    person = {
        'name': '张三',
        'age': 25,
        'city': '北京',
        'hobbies': ['读书', '运动']
    }
    
    # 访问字典
    print(f"姓名：{person['name']}")
    print(f"年龄：{person['age']}")
    print(f"爱好：{', '.join(person['hobbies'])}")
    
    # 修改字典
    person['age'] = 26
    person['email'] = 'zhangsan@example.com'
    print(f"更新后：{person}")
    
    # 集合
    print("\n集合 (set) - 学生选课示例：")
    math_students = {'张三', '李四', '王五'}
    english_students = {'李四', '赵六', '钱七'}
    
    print(f"数学课学生：{math_students}")
    print(f"英语课学生：{english_students}")
    
    # 集合运算
    both_courses = math_students & english_students
    all_students = math_students | english_students
    only_math = math_students - english_students
    
    print(f"同时选两门课：{both_courses}")
    print(f"所有选课学生：{all_students}")
    print(f"只选数学课：{only_math}")
    
    # 字符串
    print("\n字符串 (str) - 文本处理示例：")
    message = "Hello, Python!"
    name = '数据类型演示'
    
    # 字符串操作
    print(f"原始字符串：'{message}'")
    print(f"大写：'{message.upper()}'")
    print(f"小写：'{message.lower()}'")
    print(f"替换：'{message.replace('Python', 'World')}'")
    
    # 格式化字符串
    formatted = f"欢迎使用{name}程序，今天学习了{len(message)}个字符！"
    print(f"格式化输出：{formatted}")
    
    # 3. 综合应用示例
    print("\n【3. 综合应用示例】")
    print("-" * 30)
    
    # 学生成绩管理系统
    students = [
        {
            'name': '张三',
            'id': 1001,
            'scores': {
                'math': 90,
                'english': 85,
                'science': 95
            },
            'hobbies': ['篮球', '编程']
        },
        {
            'name': '李四',
            'id': 1002,
            'scores': {
                'math': 88,
                'english': 92,
                'science': 89
            },
            'hobbies': ['音乐', '阅读']
        },
        {
            'name': '王五',
            'id': 1003,
            'scores': {
                'math': 78,
                'english': 80,
                'science': 85
            },
            'hobbies': ['绘画', '运动']
        }
    ]
    
    print("学生成绩管理：")
    for student in students:
        scores = list(student['scores'].values())
        average = sum(scores) / len(scores)
        print(f"\n{student['name']} (ID: {student['id']})")
        print(f"  成绩：{student['scores']}")
        print(f"  平均分：{average:.1f}")
        print(f"  爱好：{', '.join(student['hobbies'])}")
    
    # 4. 数据类型转换示例
    print("\n【4. 数据类型转换】")
    print("-" * 30)
    
    # 转换示例
    num_str = "123"
    num_int = int(num_str)
    num_float = float(num_int)
    
    print(f"'{num_str}' -> int: {num_int}")
    print(f"{num_int} -> float: {num_float}")
    print(f"{num_float} -> str: '{str(num_float)}'")
    
    # 列表转换
    numbers = [1, 2, 3, 4, 5]
    numbers_tuple = tuple(numbers)
    numbers_set = set(numbers)
    
    print(f"列表转元组：{numbers} -> {numbers_tuple}")
    print(f"列表转集合：{numbers} -> {numbers_set}")
    
    print("\n" + "=" * 50)
    print("演示程序执行完毕！")
    print("=" * 50)

if __name__ == "__main__":
    main()
